import toolMgr from '@/biz/base/tool.js'
import productOpt from '@/biz/option/product.js'
import ruleOpt from '@/biz/option/rule.js'
import templateMgr from '@/biz/bonus/template.js'
import dt from '@dt/dt'

const repeatValidator = async (rule, value, callback) => {
  if (await templateMgr.repeat(value)) {
    callback()
  } else {
    callback(new Error('同项目模板名称不能重复'))
  }
}

function accessory(_this) {
  if (_this.$route.name === 'bonusTemplateEdit') {
    let api = toolMgr.unloadFile()
    let files = []
    if (_this.info.accessoryBOList && _this.info.accessoryBOList.length > 0) {
      files = _this.info.accessoryBOList.map((item) => ({
        url: item.accessoryUrl,
        name: item.accessoryName
      }))
    }
    return [
      {
        title: '附件上传',
        key: 'accessoryBOList',
        upload: {
          title: '上传文件',
          api,
          files,
          multiple: true,
          preview: (file) => {
            toolMgr.downloadFile(file.url, file.name)
          }
        },
        data: {
          to: (v) => {
            let accessoryBOList = v.map((item) => ({
              accessoryName: item.name,
              accessoryUrl: item.response ? item.response.data.imageURL : item.url
            }))
            return {
              accessoryBOList
            }
          }
        }
      }
    ]
  } else {
    let files = []
    if (_this.info.accessoryBOList) {
      files = _this.info.accessoryBOList.map((item) => ({
        value: item.accessoryName,
        key: item.accessoryUrl
      }))
    }
    return [
      {
        title: '附件',
        tag: {
          type: 'text',
          options: files,
          click: (tag) => {
            toolMgr.downloadFile(tag.key, tag.value)
          }
        }
      }
    ]
  }
}

function productInfo(_this) {
  return [
    productOpt.create({
      key: 'productIds',
      multiple: true,
      type: 'array',
      disabled: _this.$route.name !== 'bonusTemplateEdit' ? true : false,
      hid: _this.$route.query.housesId || dt.buildInfo().housesId
    })
  ]
}

function effectiveDate(_this) {
  return [
    {
      title: '生效日期',
      placeholder: '请选择生效日期',
      key: 'effectiveStartDate',
      disabled: _this.$route.name !== 'bonusTemplateEdit' ? true : false,
      date: {
        type: 'daterange'
      },
      data: {
        from: (info) => {
          if (info.effectiveStartDate && info.effectiveEndDate) {
            return [info.effectiveStartDate, info.effectiveEndDate]
          }
          return null
        },
        to: (v) => {
          return {
            effectiveStartDate: v[0],
            effectiveEndDate: v[1]
          }
        }
      },
      rules: [ruleOpt.required('请选择生效日期')]
    }
  ]
}

function options1(_this) {
  return [
    [
      {
        title: '模板名称',
        key: 'templateName',
        placeholder: '请输入模板名称',
        disabled: _this.$route.name !== 'bonusTemplateEdit' ? true : false,
        input: {},
        rules: [
          ruleOpt.required('请输入模板名称'),
          ruleOpt.max(50),
          _this.$route.name == 'bonusTemplateEdit' ? { validator: repeatValidator, trigger: 'blur' } : {}
        ]
      }
    ],
    [
      {
        title: '模板类型',
        key: 'templateType',
        radio: {
          options: dt.dictInfo().bonusTemplateTypeTwo.map((i) => ({
            ...i,
            disabled: _this.$route.name !== 'bonusTemplateEdit' ? true : false
          }))
        },
        change: () => {
          _this.update()
        },
        rules: [ruleOpt.required('请选择模板类型')]
      }
    ],
    productInfo(_this),
    [
      {
        title: '生效方式',
        key: 'effectiveWay',
        radio: {
          options: dt.dictInfo().effectiveWay.map((i) => ({
            ...i,
            disabled: _this.$route.name !== 'bonusTemplateEdit' ? true : false
          }))
        },
        rules: [ruleOpt.required('请选择生效方式')]
      }
    ],
    effectiveDate(_this)
  ]
}

function options2(_this) {
  return [
    {
      title: 'oa文电编号',
      key: 'oaCode',
      placeholder: _this.$route.name == 'bonusTemplateEdit' ? '请输入oa文电编号' : '',
      disabled: _this.$route.name !== 'bonusTemplateEdit' ? true : false,
      tip: _this.$route.name == 'bonusTemplateEdit' ? '（若有提交oa文电，请输入oa文电编号）' : '',
      input: {},
      rules: [ruleOpt.max(20)]
    },
    accessory(_this),
    [
      {
        title: '备注',
        key: 'remark',
        disabled: _this.$route.name !== 'bonusTemplateEdit' ? true : false,
        input: {
          type: 'textarea',
          autosize: {
            minRows: 4
          }
        },
        rules: [ruleOpt.max(300)]
      }
    ]
  ]
}

function helps() {
  return [
    {
      label: '模板类型',
      value: [
        '模板类型确定奖金的发放类型，标准及保证金对应同类型的佣金单，预发为未结佣房源的奖金发放',
        '注意：预发的房源需要先设定标准奖金模板'
      ]
    },
    {
      label: '产品、生效方式、生效日期',
      value: ['房源根据产品、生效方式、生效日期来确定匹配的奖金模板']
    },
    {
      label: '发放标准',
      value: [
        '配置为“比例发放”，可选择奖金基数为“总销”或“代理费”。总销或代理费来源于佣金单的本次结算总销及本次结算代理费',
        '配置为“固定金额”，可输入具体金额，结算奖金=填写的固定金额',
        '若为“预发”奖金模板，发放标准中的“总销”等于房源签约总价，“虚拟代理费”等于签约总价*虚拟代理费率（虚拟代理费率在奖金参数中配置）'
      ]
    },
    {
      label: '结算条件及比例',
      value: [
        '根据回佣、年底、交房各阶段的比例发放填写，标准奖金下，三者之和等于100',
        '若奖金为一次性结算，不含年底、交房奖金部分，则设为100%，0%，0%',
        '若预发奖金为固定金额，比例无需填写，预发奖金会在标准奖金发放时进行相应扣减'
      ]
    },
    {
      label: '参考配置',
      value: [
        '标准 —— 岗位：顾问；发放标准：比例发放，总销；结算条件：回佣70% 年底 25% 交房 5%',
        '预发 —— 岗位：专案；发放标准：比例发放，虚拟代理费；结算条件：签约30%'
      ]
    },
    {
      tips: '奖金模板在审批通过后，才可生效'
    }
  ]
}

export default {
  options1,
  options2,
  helps
}
